package com.rw.tool.util.expression.element;

import com.rw.tool.util.expression.exception.SignException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 表达式中的符号
 */
public abstract class Sign extends ExpressionElement {
    public abstract List<String> getSign();

    /**
     * 根据字符串解析出对应的符号
     */
    public static Sign of(String sign) {
        return getValues().stream()
                .filter(value -> value.getSign().contains(sign))
                .findAny()
                .orElseThrow(() -> new SignException(sign));
    }

    /**
     * 获得符号数组
     */
    public static List<Sign> getValues() {
        List<Sign> values = new ArrayList<>();
        values.addAll(Parentheses.getParenthesesValues());
        values.addAll(Calculation.getCalculationValues());
        return Collections.unmodifiableList(values);
    }
}
